<?php
declare (strict_types = 1);

namespace app\controller;

use think\Request;

class ScoresController
{

    protected $ScoresModel;
    protected $examsModel;
    protected $studentsModel;

    public function __construct()
    {
        $this->ScoresModel = new \app\model\Scores();
        $this->examsModel = new \app\model\Exams();
        $this->studentsModel = new \app\model\Students();
    }
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        //
         $res = $this->ScoresModel::select();
         return json([
             'code' => 200,
             'message' => 'sussess',
             'data' => $res
         ]);
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        // 格式化时间为 y-m-d-h-m-s
        $formattedTime = date('ymd', time());

        // 输出格式化的时间
        $id = "SC20".$formattedTime.mt_rand(0,max: 999); // 输出类似于 2024-12-24-10-44-09 这样的字符串
        // // 增加
        $studentId = $request->param('studentId');
        $examId = $request->param('examId');
        $score = $request->param('score');

        try {
            $studentName = $this->studentsModel->where('id', $studentId)->value('name');
            $examName = $this->examsModel->where('id', $examId)->value('name');
        }catch (\Exception $e) {
            return json([
                'code' => 500,
               'message' => 'failed',
                'data' => $e->getMessage()
            ]);
        }
        

        $data = [

            'id' => $id,
            'studentId' => $studentId,
            'examId' => $examId,
            'score' => $score,
            "studentName" => $studentName,
            "examName" => $examName,


        ];
        try {
            $res = $this->ScoresModel->save($data);
        } catch (\Exception $e) {
            return json([   
                'code' => 500,
                'message' => 'failed',
                 'data' => $e->getMessage()
                 ]);
                 }
        
        if ($res) {
            // 如果save方法返回的是影响的行数，并且您想要返回新插入的记录的详细信息，
            // 可以使用 $this->studentModel->getLastInsID() 获取新插入记录的ID，
            // 然后根据ID查询并返回该记录的详细信息。
            try {
                $insertedData = $this->ScoresModel->where('id', $id)->find();
            } catch (\Exception $e) {
                return json([
                    'code' => 500,
                   'message' => 'failed',
                    'data' => $e->getMessage()
                ]);
            }
            
            return json([
                'code' => 200,
                'message' => 'success',
                'data' => $insertedData // 返回新插入的记录的详细信息
            ]);
        } else {
            return json([
                'code' => 400,
                'message' => 'failed',
                'data' => $res
            ]);
        }
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        
          // 将ID转换为字符串，以确保查询时类型匹配
         $id = (string)$id;
    
         // 查询出该学生的信息
         try {  
            $student = $this->ScoresModel->where('id', $id)->find();
         } catch (\Exception $e) {
             return json([
                 'code' => 500,
                'message' => 'failed',
                 'data' => $e->getMessage()
                 ]);
        }
         
         if (!$student) {
             return json([
                 'code' => 400,
                 'message' => '该编号不存在',
                 'data' => null
             ]);
         }
     
         // 拿到传递过来的学生信息
         $score = $request->param('score');

         // 组装要修改的学生信息
         $data = [
             'score' => $score,
         ];
     
         // 修改学生信息
         try {
            $res = $this->ScoresModel->where('id', $id)->update($data);
         } catch (\Exception $e) {
             return json([
                 'code' => 500,
                'message' => 'failed',
                 'data' => $e->getMessage()
                 ]);
         }
         
         if ($res) {
             // 如果需要返回更新后的学生信息，可以重新查询
             try {
                $this->examsModel->where('id', $id)->find();
             }catch (\Exception $e) {
                 return json([
                     'code' => 500,
                    'message' => 'failed',
                     'data' => $e->getMessage()
                     ]);
             }
           
             return json([
                 'code' => 200,
                 'message' => '更新成功',
                 'data' => null
             ]);
         } else {
             return json([
                 'code' => 400,
                 'message' => '无需更新了',
                 'data' => null
             ]);
         }
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
        // 将ID转换为字符串，以确保查询时类型匹配
        $id = (string)$id;
        // 查询出该学生的信息
        $student = $this->ScoresModel->where('id', $id)->delete();

        if ($student) {
            return json([
                'code' => 200,
                'message' => '删除成功',
                'data' => null
                ]);
        } else {
            return json([
                'code' => 400,
                'message' => '该编号成绩不存在',
                'data' => null
            ]);
        }

    }
}
